package com.ruoyi.framework.mybatisplus.strategy.strategies;

import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
import com.ruoyi.framework.mybatisplus.OperateSymbol;
import com.ruoyi.framework.mybatisplus.strategy.AbstractQueryStrategy;


import java.lang.reflect.Field;

/**
 * 默认查询策略实现类
 * 当没有匹配到其他具体策略时，使用此策略作为兜底策略
 * 默认使用等值查询（EQ）操作
 * 
 * @author xuzhen97
 */
public class DefaultStrategy extends AbstractQueryStrategy {
    
    private static final DefaultStrategy INSTANCE = new DefaultStrategy();

    /**
     * 私有构造函数，使用单例模式
     * 设置默认操作符为等值查询（EQ）
     */
    private DefaultStrategy() {
        super(OperateSymbol.EQ);
    }

    /**
     * 获取DefaultStrategy的单例实例
     * @return DefaultStrategy实例
     */
    public static DefaultStrategy getInstance() {
        return INSTANCE;
    }

    /**
     * 匹配方法，始终返回true
     * 作为兜底策略，需要匹配所有未匹配的字段
     * @param fieldName 字段名
     * @return 始终返回true
     */
    @Override
    public boolean matches(String fieldName) {
        return true;
    }

    /**
     * 应用查询条件
     * 将字段值作为等值条件添加到查询包装器中
     * 
     * @param prefix 字段前缀
     * @param obj 查询对象
     * @param key 字段名
     * @param field 字段对象
     * @param wrapper 查询包装器
     */
    @Override
    public void apply(String prefix, Object obj, String key, Field field, AbstractWrapper wrapper) {
        String fieldName = getFieldName(key, field);
        Object value = getValue(obj, field);
        if (isValidValue(value)) {
            wrapper.eq(prefix + fieldName, value);
        }
    }
} 